iT邦幫忙

DAY 14
0

Ruby on Rails 實戰聖經 - 初心者的30天學習記錄系列 第 14

Ruby on Rails實戰聖經 (14) - ActiveRecord

  • 分享至 

  • xImage
  •  

ActiveRecord
ActiveRecord 是 Rails 的 ORM 元件(Object-relational mapping),負責與資料庫溝通,讓我們可以用物件導向的語法操作資料庫。

例如在前幾天實作CRUD的過程中,仔細回想我們怎麼跟資料庫互動的話會發現,我們好像沒有寫到任何一句SQL語法去對資料庫做互動,而是直接對物件做互動:像是@guest.new、@guest.save、@guest.find⋯⋯等等,透過ActiveRecord預設的方法轉成相對映的SQL語法,讓我們不用撰寫繁瑣的SQL語法,也增加了程式碼的維護性。

當然,任何東西都是有利有弊的。有一派的人就反對使用ORM,他們認為直接對資料庫下SQL語法才能有最好的執行效能。這點可以說是沒錯的,畢竟透過ORM等於是將程式多包裝了一層,在執行效能上當然會比更底層的SQL語法來得低。

不過,在開發以商務邏輯為主的網站時,犧牲一點執行效能換取高效的開發時間及開發門檻,這筆交易看起來還是滿划算的。

基礎操作

  • 如何新增

ActiveRecord提供了四種API,分別是save、save!、create和create!
我們可以利用主控台來練習操作這幾個功能,首先進入專案資料夾並輸入rails c打開主控台

a = Guest.new(:description => 'will go wrong')
a.save
b = Guest.new(:description => 'will go wrong')
b.save!

這邊刻意在新增Guest物件時不輸入title,讓程式出錯,讓我們可以觀察有無驚嘆號的不同。
實際輸入後就會發現a.save,主控台會回傳布林值false(or true),而b.save!程式則會直接跳出例外如下:

而create則是new+save的結合

c = Guest.create(:title => 'Bikon',:description => 'Time to sleep!' )

何時使用驚嘆號版本呢?

save和create通常用在會處理回傳布林值(true/false)的情況下(例如在 controller 裡面根據成功失敗決定 render 或 redirect)。

否則在預期應該會儲存成功的情況下,請用 save!或create! 來處理,這樣一旦碰到儲存失敗的情形,才好追蹤 bug。

另外可以透過 :validate => false 可以略過驗證
c.save( :validate => false )


上一篇
Ruby on Rails實戰聖經 (13) - Template 樣板
下一篇
Ruby on Rails實戰聖經 (15) - ActiveRecord 續
系列文
Ruby on Rails 實戰聖經 - 初心者的30天學習記錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言